package com.ivc.info.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.cs.framework.common.util.CommonUtils;
import com.cs.framework.jdbc.common.dao.CommonDao;
import com.ivc.info.dto.base.ProductDto;
import com.ivc.info.service.ProductService;
import com.ivc.info.service.StockManageService;

/**
 * 商品
 * 
 * @author hedongzhou
 * 
 */
@Service("productService")
public class ProductServiceImpl implements ProductService {

	@Resource
	private CommonDao commonDao;

	@Resource
	private StockManageService stockManageService;

	/**
	 * 查询商品
	 * 
	 * @param productNo
	 *            商品编号
	 * @return
	 */
	public ProductDto get(String productNo) {
		return commonDao.getById(ProductDto.class, productNo);
	}

	/**
	 * 查询商品总数
	 * 
	 * @param productDto
	 * @return
	 */
	public int count(ProductDto productDto) {
		return commonDao.count("Product.query", productDto);
	}

	/**
	 * 查询商品列表
	 * 
	 * @param productDto
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <T extends ProductDto> List<T> query(T productDto) {
		return (List<T>) commonDao.selectList("Product.query", productDto, productDto, productDto.getClass());
	}

	/**
	 * 获取产品名称
	 * 
	 * @param productNo
	 *            商品编号
	 * @return
	 */
	public String getProductName(String productNo) {
		ProductDto productDto = get(productNo);

		if (productDto != null) {
			return productDto.getName();
		} else {
			return null;
		}
	}

	/**
	 * 新增商品
	 * 
	 * @param productDto
	 * @return
	 */
	public ProductDto save(ProductDto productDto) {
		ProductDto entity = get(productDto.getProductNo());
		if (entity != null) {
			CommonUtils.throwRun("该商品编号【" + productDto.getProductNo() + "】已存在");
		}

		return commonDao.save(productDto);
	}

	/**
	 * 修改商品
	 * 
	 * @param productDto
	 * @return
	 */
	public ProductDto update(ProductDto productDto) {
		ProductDto entity = get(productDto.getProductNo());
		if (entity == null) {
			CommonUtils.throwRun("未查询到相关的商品信息");
		}

		CommonUtils.copyBoValue(entity, productDto);

		return commonDao.update(entity);
	}

	/**
	 * 新增商品同时新增库存
	 * 
	 * @param productDto
	 * @return
	 */
	public ProductDto saveAndStock(ProductDto productDto) {
		productDto = save(productDto);

		stockManageService.createStock(productDto.getProductNo());

		return productDto;
	}
}
